// 将文件内容写入管道文件
#include <iostream>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

#define ERR_EXIT(m)         \
    do                      \
    {                       \
        perror(m);          \
        exit(EXIT_FAILURE); \
    } while (0)

int main()
{
    // 先创建管道文件
    umask(0);
    int n = mkfifo("pipe", 0666);
    if (n < 0) ERR_EXIT("mkfifo");

    // 打开一个文件读内容到管道
    int outfd = open("file", O_RDONLY);
    if(outfd < 0) ERR_EXIT("open");

    // 打开管道文件将file文件内容写入管道
    int infd = open("pipe", O_WRONLY);
    if(infd < 0) ERR_EXIT("open");

    //开始读写
    char buffer[1024];
    int num = 0;
    while((num = read(outfd, buffer, sizeof buffer)) > 0)
    {
        write(infd, buffer, num);// 读到多少内容就写多少内容
    }

    //关闭文件
    close(outfd);
    close(infd);
    return 0;
}